package br.com.projeto.web.vraptor.controllers;

import static br.com.caelum.vraptor.view.Results.logic;
import static org.hamcrest.Matchers.greaterThan;

import java.util.List;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.Validations;
import br.com.projeto.model.FaseModel;
import br.com.projeto.model.entities.Fase;
import br.com.projeto.web.vraptor.componentes.SessionUser;

@Resource
public class FasesController {

	private Result result;
	private FaseModel model;
	private SessionUser user;
	private Validator validator;

	public FasesController(Result result, FaseModel model, SessionUser user,
			Validator validator) {
		this.result = result;
		this.model = model;
		this.user = user;
		this.validator = validator;

		if (this.user.getProjeto() != null)
			result.include("pagina", String.format("Fases do projeto %s.", user
					.getProjeto().getTitulo()));

	}

	@Get
	@Path("/fases/nova")
	public List<Fase> index() {
		if (this.user.getProjeto() != null) {
			return this.model.listarTodas(user.getProjeto());
		} else {
			result.use(logic()).redirectTo(MainController.class).home();
			return null;
		}
	}

	@Post
	@Path("/fases/nova")
	public void criar(final Fase fase) {
		if (this.user.getProjeto() != null) {

/*			validator.onError().goTo(FasesController.class).index();

			validator.checking(new Validations() {
				{
					that("fase.titulo", "fase.titulo.invalido", !fase.getTitulo().isEmpty());
					that("fase.inicio", "fase.datas.invalida", fase.getTermino(),	is(greaterThan(fase.getInicio())));
				}
			});*/

			fase.setUsuario(user.getUsuario());
			fase.setProjeto(user.getProjeto());

			// salvar a fase no banco de dados.
			this.model.criar(fase);

			result.include("alerta", String.format(
					"Fase %s criada com sucesso.", fase.getTitulo()));
			result.include("tipo", "ok");
			result.include("faseList", this.model
					.listarTodas(user.getProjeto()));
			result.use(logic()).forwardTo(FasesController.class).index();
		} else {
			result.use(logic()).redirectTo(MainController.class).home();
		}
	}

}
